//#include"Util.h"
//#include"Data.h"
#include"Server.h"

void File_test()
{
    aod::FileUtil("./www").CreateDirectory();
    aod::FileUtil("./www/index.html").SetContent("<html></html>");
    std::string body;
    aod::FileUtil("./www/index.html").GetContent(&body);
    std::cout << body << std::endl;
    std::cout << aod::FileUtil("./www/index.html").Size() << std::endl;

}

void Json_test()
{
    Json::Value val;
    val["姓名"] = "小张";
    val["年龄"] = "19";
    val["性别"] = "男";
    val["成绩"].append(79.5);
    val["成绩"].append(89.0);
    val["成绩"].append(90.5);

    std::string body;
    aod::JsonUtil::Serialize(val,&body);
    std::cout << body << std::endl;

    Json::Value stu;
    aod::JsonUtil::UnSerialize(body,&stu);
    std::cout << stu["姓名"] << std::endl;
    std::cout << stu["年龄"] << std::endl;
    std::cout << stu["性别"] << std::endl;
    for(auto &a:stu["成绩"]) {
        std::cout << a.asFloat() << std::endl;
    }
}

void TestInsert() {
    aod::TableVideo tb;
    Json::Value video;
    video["name"] = "测试视频";
    video["info"] = "这是一个用于功能测试的视频";
    video["video"] = "/videos/test.mp4";
    video["image"] = "/images/test_cover.jpg";

    bool ret = tb.Insert(video);
    std::cout << "\n=== 插入测试 ===" << std::endl;
    std::cout << (ret ? "插入成功" : "插入失败") << std::endl;
}

void TestUpdate() {
    aod::TableVideo tb;
    Json::Value video;
    video["name"] = "更新后的视频名称";
    video["info"] = "更新后的视频描述信息";
    
    bool ret = tb.UpDate(1, video); // 假设要更新 id=1 的记录
    std::cout << "\n=== 更新测试 ===" << std::endl;
    std::cout << (ret ? "更新成功" : "更新失败(可能ID不存在)") << std::endl;
}

void TestDelete() {
    aod::TableVideo tb;
    bool ret = tb.Delete(1); // 假设要删除 id=1 的记录
    std::cout << "\n=== 删除测试 ===" << std::endl;
    std::cout << (ret ? "删除成功" : "删除失败(可能ID不存在)") << std::endl;
}

void TestSelectAll() {
    aod::TableVideo tb;
    Json::Value videos;
    bool ret = tb.SelectAll(&videos);
    
    std::cout << "\n=== 查询全部 ===" << std::endl;
    if (ret) {
        std::cout << "共找到 " << videos.size() << " 条记录：" << std::endl;
        for (const auto& video : videos) {
            std::cout << "ID: " << video["id"].asInt()
                      << " | 名称: " << video["name"].asString()
                      << " | 视频路径: " << video["video"].asString()
                      << std::endl;
        }
    } else {
        std::cout << "查询失败或没有数据" << std::endl;
    }
}

void TestSelectOne() {
    aod::TableVideo tb;
    Json::Value video;
    bool ret = tb.SelectOne(1, &video); // 查询 id=1 的记录
    
    std::cout << "\n=== 查询单条 ===" << std::endl;
    if (ret) {
        std::cout << "ID: " << video["id"].asInt() << std::endl
                  << "名称: " << video["name"].asString() << std::endl
                  << "描述: " << video["info"].asString() << std::endl
                  << "封面: " << video["image"].asString() << std::endl;
    } else {
        std::cout << "记录不存在或查询失败" << std::endl;
    }
}

void TestSelectLike() {
    aod::TableVideo tb;
    Json::Value videos;
    bool ret = tb.SelectLike("测试", &videos); // 搜索名称含"测试"的记录
    
    std::cout << "\n=== 模糊查询 ===" << std::endl;
    if (ret && !videos.empty()) {
        std::cout << "找到 " << videos.size() << " 条匹配记录：" << std::endl;
        for (const auto& video : videos) {
            std::cout << "ID: " << video["id"].asInt()
                      << " | 名称: " << video["name"].asString()
                      << std::endl;
        }
    } else {
        std::cout << "没有匹配记录" << std::endl;
    }
}

void Server_Test()
{
    aod::Server server(9000);
    server.RunModule();
}

int main() {
    //TestInsert();      // 插入测试
    //TestSelectAll();   // 查询全部（验证插入）
    //TestUpdate();      // 更新测试
    //TestSelectOne();   // 查询单条（验证更新）
    //TestSelectLike();  // 模糊查询
    //TestDelete();      // 删除测试
    //TestSelectAll();   // 再次查询全部（验证删除）
    Server_Test();
    return 0;
}